package br.ufmt.model;

import java.util.ArrayList;

import br.ufmt.exception.EstadoException;

/**
 * Classe para representar as Unidades Federativas do Pa�s
 * @author jppreti
 *
 */
public class Estado {

	public final static ArrayList<Estado> estados = new ArrayList<Estado>();
	
	private String sigla;
	private String descricao;
	
	public Estado(String sigla, String descricao) throws EstadoException {
		setSigla(sigla);
		setDescricao(descricao);
	}
	
	public String getSigla() {
		return sigla;
	}
	
	public String getDescricao() {
		return descricao;
	}
	
	/**
	 * Modifica a sigla do Estado. A mesma deve possuir exatamente 2 caracteres.
	 * @param sigla
	 * @throws EstadoException
	 */
	public void setSigla(String sigla) throws EstadoException {
		if (sigla==null || sigla.length()==0) throw new EstadoException(EstadoException.SIGLA_OBRIGATORIA);
		if (sigla.length()!=2) throw new EstadoException(EstadoException.SIGLA_TAMANHO);
		this.sigla = sigla.toUpperCase();
	}
	
	/**
	 * Modifica a descri��o da sigla.
	 * @param descricao
	 * @throws EstadoException
	 */
	public void setDescricao(String descricao) throws EstadoException {
		if (descricao==null || descricao.length()==0) throw new EstadoException(EstadoException.DESCRICAO_OBRIGATORIA);
		this.descricao = descricao;
	}
	
	@Override
	public String toString() {
		return getSigla();
	}
	
	/**
	 * Guarda uma refer�ncia do objeto em um vetor
	 */
	public void salvar() {
		if (!estados.contains(this))
			estados.add(this);
	}
	
	/**
	 * Remove a refer�ncia do objeto do vetor
	 */
	public void excluir() {
		estados.remove(this);
	}
	
	/**
	 * Busca o Estado pela sigla
	 * @param sigla do estado a localizar
	 * @return Objeto Estado
	 */
	public static Estado getEstadoPorSigla(String sigla) {
		for (Estado e : estados) {
			if (e.getSigla().equalsIgnoreCase(sigla)) return e;
		}
		return null;
	}
	
	static {
		try {
			new Estado("DF", "Distrito Federal").salvar();
			new Estado("MT", "Mato Grosso").salvar();
			new Estado("MS", "Mato Grosso do Sul").salvar();
			new Estado("SP", "S�o Paulo").salvar();
		} catch (EstadoException e) {
			e.printStackTrace();
		}			
	}
}
